﻿/*
SINACOR - BMF&Bovespa
Arquivo: IRelacionamentoBroker.cs
Criado em: 26-mai-2010 17:49:30
Arquiteto Responsável: p-wgeneroso
*/
using System;
using System.ServiceModel;
using System.Collections.Generic;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Security.Services;
using Sinacor.Infra.Common;
using Sinacor.Infra.Common.Exceptions.FaultContracts;

namespace Sinacor.Servico.Bovespa.Cliente.Service.ServiceContract
{
    /// <summary>
    /// Serviço de manutenção de relacionamentos de Broker
    /// </summary>
    [ExceptionShielding]
    [ServiceContract(Namespace = "http://www.bovespa.com.br/Sinacor.Servico.Bovespa.Cliente.Service.ServiceContract", SessionMode = SessionMode.Allowed, Name = "IRelacionamentoBroker")]
    public interface IRelacionamentoBroker
    {
        #region Métodos

        /// <summary>
        /// Altera caracteristicas de um relacionamento de broker
        /// </summary>
        /// <param name="request">Entidade de relacionamento de broker</param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "AlterarRelacionamentoBroker")]
        void AlterarRelacionamentoBroker(DataContract.Request.RelacionamentoBrokerRequest request);

        /// <summary>
        /// Consulta uma lista de relacionamentos de broker conforme filtro de pesquisa
        /// </summary>
        /// <param name="request">Filtro de pesquisa</param>
        /// <returns>Lista de relacionamentos de broker</returns>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ConsultarRelacionamentosBroker")]
        List<DataContract.Response.RelacionamentoBrokerResponse> ConsultarRelacionamentosBroker(DataContract.Request.FiltroRelacionamentoBrokerRequest request);

        /// <summary>
        /// Exclui um relacionamento de broker
        /// </summary>
        /// <param name="request">Filtro chave de relacionamento de broker</param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ExcluirRelacionamentoBroker")]
        void ExcluirRelacionamentoBroker(DataContract.Request.FiltroRelacionamentoBrokerChaveRequest request);

        /// <summary>
        /// Inclui um novo relacionamento de broker
        /// </summary>
        /// <param name="request">Entidade de relacionamento de broker</param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "IncluirRelacionamentoBroker")]
        void IncluirRelacionamentoBroker(DataContract.Request.RelacionamentoBrokerRequest request);

        /// <summary>
        /// Obtém um relacionamento de broker conforme o filtro chave
        /// </summary>
        /// <param name="request">Filtro chave de relacionamento de broker</param>
        /// <returns>Entidade relacionamento de broker</returns>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ObterRelacionamentoBroker")]
        DataContract.Response.RelacionamentoBrokerResponse ObterRelacionamentoBroker(DataContract.Request.FiltroRelacionamentoBrokerChaveRequest request);

        #endregion
    }
}